package com.example.sademo.controller;

import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.stp.SaLoginConfig;
import cn.dev33.satoken.stp.StpUtil;
import com.example.sademo.utils.AjaxJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/acc/")
@Api(tags = "用户接口")
public class UserController {

	// 测试登录  ---- http://localhost:8081/acc/doLogin?name=zhang&pwd=123456
	@GetMapping("doLogin")
	@ApiOperation("登录接口")
	public AjaxJson doLogin(String name, String pwd) {
		// 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
		Map<String, Object> result = new HashMap<>();
		if("zhang".equals(name) && "123456".equals(pwd)) {
			StpUtil.login("9182u981m", SaLoginConfig.setExtra("name", "zhangsan"));
			result.put("token", StpUtil.getTokenValue());
			return AjaxJson.getSuccess("登录成功", result);
		}
		return AjaxJson.getError("登录失败");
	}

	// 查询登录状态  ---- http://localhost:8081/acc/isLogin
	@GetMapping("isLogin")
	@ApiOperation("检测是否登录")
	public AjaxJson isLogin() {
		Map<String, Object> result = new HashMap<>();
		result.put("isLogin", StpUtil.isLogin());
		return AjaxJson.getSuccessData(result);
	}

	// 查询 Token 信息  ---- http://localhost:8081/acc/tokenInfo
	@GetMapping("tokenInfo")
	@ApiOperation("获取token信息")
	public AjaxJson tokenInfo() {
		return AjaxJson.getSuccessData(StpUtil.getTokenInfo());
	}

	// 角色认证：必须具有指定角色才能进入该方法  ---- http://localhost:8081/acc/add
	@SaCheckRole("admin")
	@PostMapping("add")
	@ApiOperation("增加用户")
	public AjaxJson add() {
		return AjaxJson.getSuccess("用户增加");
	}


	// 角色认证：必须具有指定角色才能进入该方法  ---- http://localhost:8081/acc/subtract
	@SaCheckRole("super-admin")
	@DeleteMapping("subtract")
	@ApiOperation("删除用户")
	public AjaxJson subtract() {
		return AjaxJson.getSuccess("用户减少");
	}

	// 测试注销  ---- http://localhost:8081/acc/logout
	@PostMapping("logout")
	@ApiOperation("退出登录")
	public AjaxJson logout() {
		StpUtil.logout();
		return AjaxJson.getSuccess("注销成功");
	}
}

